package com.orangelife.service.bill;

import java.util.List;
import java.util.Map;

import com.orangelife.exception.AppBizException;
import com.orangelife.service.bill.model.PreDetail;
import com.orangelife.service.propFeeComputeRule.model.Rule;
import com.orangelife.webservice.service.bill.entity.BillDto;
import com.orangelife.webservice.service.bill.entity.PreFeeDto;


public interface IComputeBillService {

	/**
	 * 生成缴费账单
	 * 
	 * @author
	 * @date创建时间 2016-07-04 11:04:21
	 * @param propFeeMeter
	 * @return
	 * @throws AppBizException
	 */
	public void startCreFeeDetail(BillDto billDto)throws Exception, AppBizException;
	

	/**
	 * 生成缴费账单
	 * 
	 * @author
	 * @date创建时间 2016-07-04 11:04:21
	 * @param propFeeMeter
	 * @return Map errCode 0 errInfo rules
	 * @throws AppBizException
	 */
	public Map<String,Object> checkRules(BillDto billDto)throws Exception, AppBizException;
	
	
	/**
	 * 生成缴费账单根据规则列表
	 * 
	 * @author
	 * @date创建时间 2016-07-04 11:04:21
	 * @param propFeeMeter
	 * @return
	 * @throws AppBizException
	 */
	public void startCreFeeDetail(BillDto billDto,List<Rule> rules)throws Exception, AppBizException;
	
	/**
	 *获取某个房屋预缴的类目费用(包含预缴开始时间)
	 * 
	 * @author
	 * @date创建时间 2016-07-04 11:04:21
	 * @param propFeeMeter
	 * @return
	 * @throws AppBizException
	 */
	public List<Map<String,Object>> preFeeDetail(BillDto billDto)throws AppBizException;
	
	/**
	 *通用某些房屋 某一时间段内的预缴费用
	 * 
	 * @author
	 * @date创建时间 2016-07-04 11:04:21
	 * @param propFeeMeter
	 * @return
	 * @throws AppBizException
	 */
	public  Map<String, Map<String,PreDetail> > commPreFeeDetail(BillDto billDto,List<Map<String,Object>>  apartList)throws AppBizException ,Exception;
	/**
	 *计算预缴费用,根据预缴的项目（针对单个房屋）
	 * 
	 * @author
	 * @date创建时间 2016-07-04 11:04:21
	 * @param propFeeMeter
	 * @return
	 * @throws AppBizException
	 */
	public List<Map<String,Object>> getPreFeeDetail(String commID,String apartmentID,List<PreFeeDto> preFeeDto)throws Exception, AppBizException;
	
	
	/**
	 *计算预缴费用,并生成缴费项目
	 * 
	 * @author
	 * @date创建时间 2016-07-04 11:04:21
	 * @param propFeeMeter
	 * @return
	 * @throws AppBizException
	 */
	public List<String> crePreFeeDetail(String commID,String apartmentID,List<PreFeeDto> preFeeDto)throws Exception, AppBizException;
	
	
	
	/**
	 *生成固定费用
	 * 
	 * @author
	 * @date创建时间 2016-07-04 11:04:21
	 * @param propFeeMeter
	 * @return
	 * @throws AppBizException
	 */
	public void crePreFeeDetail(String commID,String apartmentID)throws Exception, AppBizException;
	
	
	
	
	
	/**
	 *每月生成固定费用
	 * 
	 * @author
	 * @date创建时间 2016-07-04 11:04:21
	 * @param propFeeMeter
	 * @return
	 * @throws AppBizException
	 */
	public void autoCrePreFeeDetail(String commID)throws Exception, AppBizException;
	
	
	

}
